package com.situ.music.adapter;

import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.situ.music.R;
import com.situ.music.activity.MainActivity;

import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;

// Alt+Enter
// 适配器：完成Data->View
public class FileAdapter extends BaseAdapter {
    private MainActivity mainActivity;
    private File[] files;

    public FileAdapter(MainActivity mainActivity) {
        this.mainActivity = mainActivity;
    }

    /**
     * 传递过来的是当前文件夹，展示这个文件夹里面的数据
     * @param currentDirectory
     */
    public void setData(File currentDirectory) {
        // 首先去掉所有名字里面以“.”开头的文件
        files = currentDirectory.listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                return !pathname.getName().startsWith(".");
            }
        });
        // files = currentDirectory.listFiles();
        // java集合框架
        Collections.sort(Arrays.asList(files), new Comparator<File>() {
            @Override
            public int compare(File file1, File file2) {
                // 文件夹放在前面，文件放在后面
                if (file1.isDirectory() && file2.isFile()) {
                    return -1;
                } else if (file1.isFile() && file2.isDirectory()){
                    return 1;
                } else {
                    // file1和file2要么同时是文件，要么同时是文件夹
                    // getName()得到的文件名字是字符串，字符串里面已经默认实现了一个compareTo
                    // 方法，按照字母顺序排列
                    return file1.getName().compareTo(file2.getName());
                }
            }
        });

        // 如果修改Adapter中的数据,Adapter会重新渲染数据
        notifyDataSetChanged();
    }

    // 返回总的数量
    @Override
    public int getCount() {
        return files.length;
    }

    @Override
    public Object getItem(int position) {
        return files[position];
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    /**
     * ListView中每一个Item：Data->View
     * 也就是files里面有10条数据，那么这个getView会被调用10次
     * @param position 当前正在渲染的是哪一个Item
     * @param convertView 当前每一个Item的布局
     * @param parent
     * @return
     */
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder viewHolder = new ViewHolder();
        if (convertView == null) {// 第一次
            LayoutInflater layoutInflater = (LayoutInflater) mainActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = layoutInflater.inflate(R.layout.list_item, null);
            viewHolder.ivFileIcon = (ImageView) convertView.findViewById(R.id.iv_file_icon);
            viewHolder.tvFileName = (TextView) convertView.findViewById(R.id.tv_file_name);
            convertView.setTag(viewHolder);
        } else {// 之后直接从tag里面取出来
            viewHolder = (ViewHolder) convertView.getTag();
        }

        final File file = files[position];
        final String fileName = file.getName();
        viewHolder.tvFileName.setText(fileName);
        if (file.isDirectory()) {
            viewHolder.ivFileIcon.setBackgroundResource(R.drawable.icon_folder);
        } else {// 文件
            // aaa.mp3   bbb.mp4
            String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);// mp3
            if (suffix.equalsIgnoreCase("mp3")) {
                viewHolder.ivFileIcon.setBackgroundResource(R.drawable.icon_audio);
            } else if (suffix.equalsIgnoreCase("mp4")) {
                viewHolder.ivFileIcon.setBackgroundResource(R.drawable.icon_video);
            } else {
                viewHolder.ivFileIcon.setBackgroundResource(R.drawable.icon_file);
            }
        }

        convertView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (file.isDirectory()) {
                    setData(file);
                    mainActivity.updateCurrentDirectory(file);
                } else {
                    String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);// mp3
                    if (suffix.equalsIgnoreCase("mp3")) {
                        // 调转到MusicPlayActivity去播放这首歌曲
                       /* Intent intent = new Intent(mainActivity, MusicPlayActivity.class);
                        intent.putExtra("path", file.getAbsolutePath());
                        ArrayList<String> mp3List = getMP3Files(files);
                        intent.putExtra("mp3List", mp3List);
                        mainActivity.startActivity(intent);*/
                    } else if (suffix.equalsIgnoreCase("mp4")) {
                    } else {
                    }
                }
            }
        });

        return convertView;
    }

    /**
     * 返回传过来的文件数组里面所有的mp3歌曲
     * @param files
     * @return
     */
    private ArrayList<String> getMP3Files(File[] files) {
        ArrayList<String> list = new ArrayList<>();
        for (File file : files) {
            String fileName = file.getName();
            String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);
            if (suffix.equalsIgnoreCase("mp3")) {
                list.add(file.getAbsolutePath());
            }
        }

        return list;
    }

    public class ViewHolder{
        public ImageView ivFileIcon;
        public TextView tvFileName;
    }
}
